package a00_LeetCode.LinkedList;

/**
 * @Author quan
 * @Description 环形链表
 * @Date 2023/3/19 15:00
 */
public class Num141_hasCycle {
    /**
     * 思想：快慢指针：如果存在环，则快指针一定在某一个时刻追上慢指针。如果快指针为null时还没追上，则一定没有环
    */
    public boolean hasCycle(ListNode head) {
        //定义两个快慢指针
        ListNode low = head;
        ListNode fast = head;
        //当快指针为null时还没相遇，说明没有环
        while (fast !=null && fast.next != null){
            //让快指针每次走两步，慢指针每次走一步
            low = low.next;
            fast = fast.next.next;
            //如果快指针与慢指针相遇了，说明有环
            if(low == fast){
                return true;
            }
        }
        return false;
    }
}
